package com.yonyou.cyxdms.sysAuth.service.service.org;


import com.yonyou.cyx.framework.service.base.ICommonService;
import com.yonyou.cyxdms.sysAuth.service.dto.OrgDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.area.OrgOutDto;
import com.yonyou.cyxdms.sysAuth.service.entity.OrgPO;
import com.yonyou.cyxdms.sysAuth.service.entity.TrOrgPO;
import com.yonyou.cyxdms.sysAuth.service.vo.org.*;
import com.yonyou.cyxdms.sysAuth.service.vo.user.UserVO;
import com.yonyou.cyxdms.sysmanage.client.vo.org.OrgAndParentVO;
import com.yonyou.cyxdms.sysmanage.client.vo.org.OrgParentVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 组织 服务类
 * </p>
 *
 * @author maxingjian
 * @since 2019-08-26
 */
public interface OrgService extends ICommonService<OrgDTO, OrgPO, Integer> {
    /**
     * 通过Id查询下级组织
     *
     * @return
     * @author maxingjian
     * @since 2019/8/27
     */
    public List<OrgVO> getChildOrg(String type, String orgId);

    public List<OrgVO> getChildOrgs();

    public List<OrgVO> getChildOrgs(String orgId);

    /**
     * 通过Id查询明细
     *
     * @return
     * @author maxingjian
     * @since 2019/8/27
     */
    public OrgDetailVO getOrgDetail(String orgId);


    /**
     * 通过Id获取可查询品牌
     *
     * @return
     * @author maxingjian
     * @since 2019/8/27
     */
    public List<BrandListVO> getOrgBrand(String orgId);


    /**
     * 通过Id获取可查询品牌
     *
     * @return
     * @author maxingjian
     * @since 2019/8/27
     */
    public List<SeriesListVO> getOrgSeries(String orgId, String brandId);

    /**
     * 保存组织
     *
     * @return
     * @author maxingjian
     * @since 2019/8/27
     */
    public OrgDetailVO saveDetailOrg(OrgDetailVO orgDetailVO);

    /**
     * 保存品牌
     *
     * @return
     * @author 李贺
     * @since 2019/10/31
     */
    void insertDealerOrgRelation(OrgDetailVO orgDetailVO, Integer id);

    /**
     * 获取登录用户组织信息
     *
     * @auther: 李贺
     * @since: 2019/9/6
     */
    OrgAndParentVO getOrg(String orgId);

    /**
     * 新增组织
     *
     * @auther: 李贺
     * @since: 2019/9/10
     */
    void addOrg(OrgPO orgpo);

    /**
     * 新增组织关系
     *
     * @auther: 李贺
     * @since: 2019/9/10
     */
    void addTrOrg(TrOrgPO trorgpo);

    List<OrgDTO> getOrgList();

    /**
     * 根据类型查询相应一组id
     *
     * @auther: 马邢健
     * @since: 2019/9/26
     */
    List<OrgByTypeVO> getOrgByOrgType(String orgType, String companyId, String appId);

    /**
     * 根据类型查询相应一组id
     *
     * @auther: 马邢健
     * @since: 2019/9/26
     */
    List<OrgByTypeVO> getOrgByOrgType4cms(String orgType, String companyId, String appId ,String parentOrgId,
                                          String orgCode, String orgName);
    /**
     * 获得厂端部门信息
     *
     * @auther: 李贺
     * @since: 2019/10/14
     */
    GmsOrgVO getGmsOrg(Long orgId);

    Map<Long, OrgDealerVO> getOrgNameByOwnerCode(String appId, Map<Long, String> ownercodes);

    void delDealerOrgRelation(Long orgRelationId);

    /**
     * 获取所有销售部门
     *
     * @return
     * @author 李贺
     * @since 2019/11/20
     */
    List<OrgParentVO> getSaleOrg(Long orgId);

    /**
     * 获取所有销售部门ORG_TYPE
     *
     * @return
     * @author 李贺
     * @since 2019/11/20
     */
    List<Integer> getSaleOrgType();

    void deleteById(Long id,Long companyId);

    /**
     * 获取所有事业部
     *
     * @return
     * @author 李贺
     * @since 2019/11/25
     */
    List<OrgParentVO> getBusinessOrg();

    /**
     * 通过orgID获得所有人
     *
     * @return
     * @author 李贺
     * @since 2019/11/25
     */
    List<UserVO> getUserByOrgId(Long orgId);

    /**
     * 根据组织id 获得组织信息
     *
     * @auther: 李贺
     * @since: 2019/12/6
     */
    List<OrgParentVO> getOrgByOrgIds(String orgId);

    /**
     * 通过上级orgID和下属组织类型获得下属组织
     *
     * @return
     * @author 李贺
     * @since 2019/12/13
     */
    List<OrgVO> getOrgByTypeAndParent(Long parentOrgId, Long orgType);

    /**
     * 获得销售小组
     *
     * @return
     * @author 李贺
     * @since 2020/1/7
     */
    List<OrgByTypeVO> listSalesTeam();

    List<OrgParentVO> getBusinessOrgAll();

    List<OrgParentVO>  getBusinessOrgAllByAppId(String appId);

    List<OrgOutDto> getOrgAllOut();
}
